package org.shoukaiseki.commons.utils;

import org.apache.commons.lang3.StringUtils;

import java.io.File;

/**
 * <br>
 *
 * @author 蒋カイセキ    Japan-Tokyo  18-10-23 下午3:57<br>
 * ブログ http://www.shoukaiseki.top/<br>
 * E-メール jiang28555@Gmail.com<br>
 **/
public class FileUtils {

    public static boolean exists(String filename){
       return new File(filename).exists();
    }

    /**
     * 创建层级目录
     * @param path
     * @return
     */
    public static boolean mkdirs(String path){
        File file = new File(path);
        if(file.exists()){
            return true;
        }
        if(file.mkdirs()){
            return true;
        }
        return false;

    }


    /**
     * 目录是否存在
     * @param path
     * @return
     */
    public static boolean isDirectory(String path){
        File file = new File(path);
        boolean exists = file.exists();
        if(exists){
           return file.isDirectory();
        }
        return  false;
    }


    /**
     * 格式化成linux目录访问格式,将 \ 变更为 /
     * @param path 访问路径
     * @return
     */
    public static String formattedIntoLinuxDirectory(String path){
        String pathTemp = path.replaceAll("\\\\", "/").replaceAll("//","/");
        return pathTemp;

    }

    public static String formatJavaDirectory(String path,String packageName){
        String pathTemp = path.replaceAll("\\\\", "/").replaceAll("//","/");
        String packagePath=packageName.replaceAll("\\.","/");
        if(pathTemp.endsWith("/")){
            return new StringBuilder(pathTemp).append(packagePath).toString();
        }
        return new StringBuilder(pathTemp).append("/").append(packagePath).toString();
    }


    /**
     * 保存路径格式化成有效的路径<br>
     * @param configPath         配置文件设置的路径
     * @param configPackage      配置文件设置的包名
     * @param isResource         是否资源文件,maven 资源路径为 resources
     * @return  格式化后的文件保存路径
     */
    public static String savePathFormat(String configPath,String configPackage,boolean isResource){

        String mavenPathSuffix;
        String antPathSuffix;
        if(isResource){
            mavenPathSuffix="/src/main/resources";
            antPathSuffix="resources";
        }else{
            mavenPathSuffix="/src/main/java";
            antPathSuffix="src";
        }

        String path = System.getProperty("user.dir");

        //java代码存放路径
        String saveJavaPath=null;



        if(StringUtils.isEmpty(configPath)){
            if(FileUtils.isDirectory(path+mavenPathSuffix)){
                //maven 目录方式
                saveJavaPath=FileUtils.formatJavaDirectory(path+mavenPathSuffix,configPackage);
            }else if(FileUtils.isDirectory(path+antPathSuffix)){
                saveJavaPath=FileUtils.formatJavaDirectory(path+antPathSuffix,configPackage);
            }else {
                saveJavaPath=FileUtils.formatJavaDirectory(path,configPackage);
            }
        }else{
            if(SystemUtils.isLinux()){
                if(configPath.startsWith("/")){
                    saveJavaPath=FileUtils.formatJavaDirectory(configPath,configPackage);;
                }else{
                    saveJavaPath=FileUtils.formatJavaDirectory(path+"/"+configPath,configPackage);;
                }
            }else {
                // 如果路径名为 C: D: 类似的绝对路径,则直接使用绝对路径
                if(configPath.startsWith(":",1)){
                    saveJavaPath=FileUtils.formatJavaDirectory(configPath,configPackage);;
                }else{
                    saveJavaPath=FileUtils.formatJavaDirectory(path+"/"+configPath,configPackage);;
                }
            }
        }

        return saveJavaPath;
    }

}
